package score;

import java.util.Vector;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

/**
 * Clase donde se encuentra los puntajes de los 3 tipos de dificultades 
 */
import myExceptions.MyFileException;

public class Scorelist {

	private Vector <Score> facil;
	private Vector <Score> normal;
	private Vector <Score> dificil;
	/**
	 * Crea una lista con las tablas de los 3 tipos de dificultad
	 * @param buf buffer de lectura del archivo de puntajes
	 * @throws MyFileException
	 */
	public Scorelist( BufferedReader buf )throws MyFileException {
		
		facil= new Vector <Score> (10);
		normal = new Vector <Score> (10);
		dificil = new Vector <Score> (10);
		
		Score s;
		String line = null;
		do {
			try {
				s = new Score (buf);
			} catch (MyFileException e){
				throw e;
			}
						
			switch (s.getDiffic() ) {
				case 0:
					facil.add(s);
					break;
				case 1:
					normal.add(s);
					break;
				case 2:
					dificil.add(s);
					break;
				default:
				//	TODO debug
			}
		
			if( (line = s.readLine( buf )) == null ){
				break;
			}
				
		} while (line != null);
	}
	/**
	 * Actualiza la lista de puntajes segun la dificultad con la que se jugo
	 * @param user nombre del jugador
	 * @param puntaje  puntaje obtenido
	 * @param dific  dificultad en la que eligio jugar
	 */
	public void newScore( String user, double puntaje, String dific){
		Vector <Score> aux = null;
		Score auxScore = null;
		int dif = 0;
		if( dific.equals("Easy")){
			aux = facil;
			dif = 0;
		}
		else if( dific.equals("Normal")){
				aux = normal;
				dif = 1;
		}
		else{
			aux = dificil;
			dif = 2;
		}
		auxScore = new Score( user, dif, puntaje );
		 int flag = 1;
		for( int i = 0; i < 10 && flag == 1 ; i++ ){
			if( (aux.get(i)).getScore() < puntaje ){
				aux.add(i, auxScore);
				flag = 0;
			}
		}
	
	}
	/**
	 * Guarda en un archivo de nombre puntajes.txt los 10 puntajes mas altos de cada nivel
	 * de dificultad
	 * @param buf buffer de escritura
	 * @throws IOException
	 */
	public void saveFile( BufferedWriter buf ) throws IOException{
		for(int i = 0; i < 10; i++ ){
			buf.write(((this. facil).get(i)).getUserName()+ '\n' );
			buf.write(Integer.toString(((this. facil).get(i)).getDiffic())+ '\n' );
			buf.write(Double.toString(((this. facil).get(i)).getScore()) + '\n');
			buf.write("%%%%\n");
		}
		for(int i = 0; i < 10; i++ ){
			buf.write(((this. normal).get(i)).getUserName() + '\n');
			buf.write(Integer.toString(((this. normal).get(i)).getDiffic()) + '\n');
			buf.write(Double.toString(((this. normal).get(i)).getScore()) + '\n');
			buf.write("%%%%\n");
		}
		for(int i = 0; i < 10; i++ ){
			buf.write(((this. dificil).get(i)).getUserName() + '\n');
			buf.write(Integer.toString(((this. dificil).get(i)).getDiffic()) + '\n');
			buf.write(Double.toString(((this. dificil).get(i)).getScore()) + '\n');
			if( i <= 8 ){
				buf.write("%%%%\n");
			}
		}
		
	}
	
/**
 * 
 * @return devuelve una lista con los puntajes de la dificultad facil
 */
	public Vector<Score> getDificil() {
		return dificil;
	}
/**
 * 
 * @return Devuelve una lista con los puntajes de la dificultad normal
 */
	public Vector<Score> getFacil() {
		return facil;
	}
/**
 * 
 * @return Devuelve una lista con los puntajes de la dificultad dificil
 */
	public Vector<Score> getNormal() {
		return normal;
	}
	
}
